package com.leetCode;
//测试移位操作
/**
 *  int在java中是占有4个字节的，每个字节占8个位
 *  >>    无符号右移，先不看符号，再按位移动，最后将符号加上
 *  <<    无符号左移，先不看符号，再按位移动，最后将符号加上
 *  >>>   先判断是否是负数，是负数，先进行补码操作，然后再进行按位移动，高位补1
 *                       不是负数，进行按位移动，高位补0
 *  java中-号表示取反的意思，也就是补码，例如2的码是0010，-2也就是2的补码是1101
 *
 *  注意：
 *      当负数右移后数值达到0时，值为-1；
 *      当正数右移后数值达到0时，值为0；
 */
public class testShifting {

    public static void main(String[] args) {
        int i = 2;
        System.out.println(i + "的二进制是：" + Integer.toBinaryString(i));
        System.out.println(i + "进行>>后的结果" + (i >> 2) + "  他的二进制是：" + Integer.toBinaryString(i >> 2) + "  他的二进制位数是：" + Integer.toBinaryString(i >> 2).length() );
        System.out.println(i + "进行<<后的结果" + (i << 2) + "  他的二进制是：" + Integer.toBinaryString(i << 2) + "  他的二进制位数是：" + Integer.toBinaryString(i << 2).length() );
        System.out.println(i + "进行>>>后的结果" + (i >>> 2) + "  他的二进制是：" + Integer.toBinaryString(i >>> 2) + "  他的二进制位数是：" + Integer.toBinaryString(i >>> 2).length());
        //System.out.println(i <<< 2);      //java中不支持此操作
    }
}
